tput est un utilitaire qui utilise la base de données terminfo pour modifier le paramétrage du terminal. Il permet d'initialiser ou réinitialiser le terminal.
tput peut notamment être utilisé pour déplacer le curseur à l'intérieur du terminal et ajouter un peu de décoration au texte (couleur, formatage). Il peut aussi permettre de personnaliser l'invite de commande.
Ce tutoriel donne quelques pistes pour utiliser la couleur et déplacer le curseur à l'intérieur du terminal, avec et sans tput.
Savoir un peu utiliser le terminal.
La méthode semble-t-il la plus fréquemment rencontrée sur le web ne fait pas appel à tput mais à une succession de codes qui, pour efficaces qu'ils soient, rendent la lecture des scripts un peu difficile. Cette méthode nécessite de préfixer le texte à traiter par '\033[' (ou par '\e[' ou '\E['), le code '\033[0m' permettant de rétablir les paramètres par défaut.
Exemples d'utilisation :
echo -e "\033[31mUn texte en rouge,\033[0m la suite ne l'est plus" echo -e "Un texte en \e[32m\033[43mvert sur fond jaune\E[0m" echo -e "Et voici \033[31m\033[1m\033[4m\033[5m\033[7mun texte\033[0m mis en forme selon une forme particulièrement peu explicite."
Les codes numérotés 30 à 37 permettent de définir la couleur du texte (foreground), les codes 40 à 47 concernent l'arrière plan (background). Voici la liste de ces codes :
30 et 40 : noir 31 et 41 : rouge 32 et 42 : vert 33 et 43 : jaune 34 et 44 : bleu 35 et 45 : rose 36 et 46 : cyan 37 et 47 : gris
Quelques éléments de formatage du texte peuvent également être définis. Il sont activés par les code ssuivants : 1 : gras 4 : soulignement 5 : clignotant (ne fonctionne pas avec tous les terminaux) 7 : surlignement
Le retour aux valeurs de base est assuré par l'utilisation du code 0
Ainsi qu'il a été vu infra, il est possible d'appliquer plusieurs formatages au même texte.
La méthode la plus simple consiste à se faire succéder les différents codes dans leur intégralité. Exemple d'un texte jaune, gras sur fond rouge, avec un mot passé en surligné :
echo -e "Voici le \033[33m\033[1m\033[4m\033[41mle \033[7mtexte\033[0m mis en forme."
Cette mise en forme peut se condenser ainsi, en séparant les formatage par un ';' :
echo -e "Voici le \e[33;1;4;41mle \E[7mtexte\033[0m mis en forme selon la forme condensée."
Un script aide-mémoire est disponible sur le site www.admin-linux.fr dont vous trouverez ci-dessous une version un peu modifiée :
#!/bin/bash
function usage () {
echo "Source : https://www.admin-linux.fr/bash-de-la-couleur-dans-le-shell/"
echo "Ce script permet de visualiser les codes couleurs et quelques effets de décoration utilisables dans bash"
exit 10
}
if [[ "$1" == "-h" ]] || [[ "$1" == "-help" ]] || [[ "$1" == "--help" ]]; then usage ; fi
# Texte de l'exemple ( >= 3 caractères ) :
TEXT=" Bash " ;
# Couleur du texte :
declare -a FG=('' '1' '4' '5' '7' '30' '31' '32' \
'33' '34' '35' '36' '37') ;
echo
# Première ligne :
printf "FG \ BG\t%${#TEXT}s" ;
for bg in {40..47} ; do
printf "%${#TEXT}s" "${bg} " ;
done
echo ;
# Création du tableau de présentation des combinaisons :
for fg in ${!FG[*]} ; do
echo -ne "${FG[fg]}\t\033[${FG[fg]}m$TEXT" ;
for bg in {40..47} ; do
echo -ne "\033[${FG[fg]};${bg}m$TEXT\033[0m" ;
done
echo ;
done
# Comment déclarer une couleur :
cat <<_eof_
FG = texte (foreground) \ BG = arrière-plan (background)
Comment déclarer une couleur :
------------------------------
Format de déclaration : \\033[XXm où XX prend les valeurs
de FG ou BG" ;
Retour aux paramètres par défaut : \033[0m" ;
Exemples :
echo -e "\033[31mUn texte en rouge et\033[0m retour a la normale"
echo -e "\033[34m\033[45mBleu sur fond rose\033[0m"
peut aussi s'écrire :
echo -e "\033[34;45mBleu sur fond rose\033[0m"
echo -e "\033[34mbleu, \033[1mgras, \033[4msouligné, \033[5mclignotant \033[7met surligné\033[0m
Pour plus de détails : http://www.admin-linux.fr/?p=9011
_eof_
La commande setaf, suivie d'un code numérique de 1 à 7 permet de changer la couleur du texte. Setaf fonctionne avec les terminaux xterm (a priori cas général sous Ubuntu). On utilise sgr0 pour revenir aux valeurs par défaut. syntaxe :
tput setaf [code_couleur]
La commande setf ne paraît pas fonctionner dans les terminaux xterm.
tput setf [code_couleur]
tput setab [code_couleur]
La commande setb ne paraît pas fonctionner dans les terminaux xterm.
tput setb [code_couleur]
| Couleur | Code | |
|---|---|---|
| noir | 0 | |
| rouge | 1 | |
| vert | 2 | |
| jaune | 3 | |
| bleu | 4 | |
| magenta | 5 | |
| cyan | 6 | |
| blanc | 7 |
Le nombre des couleurs possible est désormais généralement égal à 256 au moins. Pour le vérifier, il suffit de saisir dans le terminal la commande suivante :
tput colors
Si le retour de la commande est '256', vous pouvez étendre votre terrain de jeux. Le code couleur doit être annoncé sur 3 chiffres (de 001 à 256).
Syntaxe de base de tput
echo "Texte ordinaire "$(tput setaf 3; tput setab 1)"jaune sur fond rouge"$(tput sgr0)" à nouveau ordinaire."
Cette syntaxe put être rendue plus compréhensible en utilisant des variables bien choisies. Ainsi, dans l'exemple suivant, l'afichage de $rouge place le texte en rouge, celui de $ordinaire rétabli les paramètres par défaut :
rouge=$(tput setaf 1) ordinairel=$(tput sgr0) echo "avant ""$rouge""Le Texte""$ordinaire"" après"
Pour afficher les 8 couleurs principales :
couleurs=(Noir Rouge Vert Jaune Bleu Magenta Cyan Blanc);
for i in $(seq 1 7);
do
echo -e " $(tput setaf $i)${couleurs[$i]}\tTexte$(tput sgr0)\t$(tput bold)$(tput setaf $i)Texte$(tput sgr0)\t$(tput sgr 0 1)$(tput setaf $i)Texte$(tput sgr0)\t(tput setaf $i)";
done
et le résulat :
Pour visualiser les 256 couleurs possibles
for i in {0..256};do o=00$i;echo -ne "${o:${#o}-3:3} "$(tput setaf $i;tput setab $i)" "$(tput sgr0);done;
sous étape une
Voila, vous savez maintenant faire le café avec Ubuntu !
Si votre café est trop fort, saisissez la commande suivante dans un terminal: …
Tput
Personnaliser le prompt
Contributeurs principaux : votre nom ou pseudonyme, nom ou pseudo autre.
Basé sur « Titre original de l'article » par Auteur Original.